This disclosure relates to remote debugging systems and techniques.
Applications and other software running on a device may stop functioning properly and may even cause the device to crash. Typically, debugging software is used to find the root cause of the problem, e.g., a defect in the application, a defect in the device's operating system (OS) kernel, or a combination of defects. Electronics within the device, such as integrated circuits, are often designed with built-in testing and debugging hardware to provide access to an external testing and debugging platform via a dedicated debug port.
To assist in hardware and software debugging, a consortium of companies formed the Joint Test Action Group (JTAG) to create an industry standard which would define an architecture and software protocol for built-in testing and debugging hardware. The resulting standard, sometimes referred to as JTAG, was adopted by the Institute of Electrical and Electronics Engineers (IEEE) as IEEE Standard 1149.1. The JTAG standard uses a boundary-scan architecture, so called because the JTAG circuitry is connected to a dedicated path around the integrated circuit's boundary (where the I/O pins are located). JTAG uses this boundary path to directly input to, and download data and instructions from, the I/O pins of the integrated circuit. The JTAG capability of an integrated circuit is accessed through a multi-pin JTAG test access port (TAP), through which instructions and data from external testing software are input and instructions and data from the integrated circuit are output.
The JTAG interface and circuitry can be used to implement debugging and emulation functions. In debugging embodiments, the JTAG interface is used to download code, execute it, and examine register and memory values. Further, the JTAG interface can enable debugging techniques such as code tracing, benchmarking, trapping, evaluating breakpoints, profiling, etc. Typically, a dedicated debug port such as a JTAG port is separate from a device's other wireline ports such as Universal Serial Bus (USB), Ethernet, etc., and is separate from a device's wireless ports such as Bluetooth, cellular, or Wi-Fi (e.g., IEEE 802.11).